﻿//using System;
//using System.Collections.Generic;
//using UnityEngine;

//namespace Core.Frame
//{
//    public class FrameItem : Core.Component, IAwake<EFrameType, int>
//    {
//        public EFrameType Type { get; private set; }
//        public int frameRate { get; private set; }
//        public float frameTime { get; private set; }
//        public int frameCount { get; private set; }

//        private float m_elapsed_time;

//        private Queue<IFrameUpdate> m_update_queue = new Queue<IFrameUpdate>();
//        private Queue<IFrameUpdate> m_update_queue2 = new Queue<IFrameUpdate>();

//        public void Awake(EFrameType type, int frame_rate)
//        {
//            Type = type;
//            frameRate = frame_rate;
//            frameTime = 1.0f / frame_rate;
//            m_elapsed_time = 0;
//        }

//        public override void Dispose()
//        {
//            if (IsDisposed) return;
//            base.Dispose();

//            m_elapsed_time = 0;
//        }

//        public void Update()
//        {
//            m_elapsed_time += Time.deltaTime;

//            if (m_elapsed_time >= (frameCount + 1) * frameTime)
//            {
//                frameCount++;

//                try
//                {
//                    FrameUpdate(frameTime);
//                }
//                catch (Exception e)
//                {
//                    Debug.LogError(e);
//                }
//            }
//        }

//        private void FrameUpdate(float delta_time)
//        {
//            while (m_update_queue.Count > 0)
//            {
//                var obj = m_update_queue.Dequeue();

//                if (obj is not Component component || component.IsDisposed == true)
//                {
//                    continue;
//                }

//                m_update_queue2.Enqueue(obj);

//                try
//                {
//                    obj?.Update(frameCount, delta_time);
//                }
//                catch (Exception e)
//                {
//                    Debug.LogError(e);
//                }
//            }

//            var temp = m_update_queue;
//            m_update_queue = m_update_queue2;
//            m_update_queue2 = temp;
//        }

//        public void Add(IFrameUpdate obj)
//        {
//            m_update_queue.Enqueue(obj);
//        }
//    }
//}
